import type {
  AxiosRequestConfig,
  AxiosResponse,
  AxiosInstance,
  InternalAxiosRequestConfig
} from 'axios'
import axios from 'axios'
// 创建实例
const instance: AxiosInstance = axios.create({
  baseURL: import.meta.env.VUE_APP_BASE_API
})
// 请求超时时长
instance.defaults.timeout = 30000
// 默认ContentType
instance.defaults.headers['Content-type'] = 'application/json'
// 请求方法
function request<T = any>(config: AxiosRequestConfig): Promise<T> {
  console.log('请求配置', config)
  return new Promise((resolve, reject) => {
    instance
      .request<any, AxiosResponse>(config)
      .then((res) => {
        resolve(res as unknown as Promise<T>)
      })
      .catch((err: Error) => {
        reject(err)
      })
  })
}
// 添加请求拦截器
axios.interceptors.request.use(
  function (config: InternalAxiosRequestConfig): InternalAxiosRequestConfig {
    // 在发送请求之前+token
    config.headers['Authorization'] = ''
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
// 添加响应拦截器
axios.interceptors.response.use(
  function (response: AxiosResponse): AxiosResponse {
    // 根据返回的状态码判断操作
    return response.data
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default request
